/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package klijent.kontrolerKI;

import domen.Trening;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import klijent.Klijent;
import klijent.gui.util.ModelTabeleTreninzi;
import server.util.Transfer;

/**
 *
 * @author Ivan Ivic
 */
public class KontrolerKITrening {
    private static int signal;

    public static void pripremiFormuRadSaTreninzima(JTable jtTreninzi, JButton jbSacuvaj, JButton jbObrisi)
    {
        postaviTreningeUTabelu(jtTreninzi);
        jbObrisi.setEnabled(false);
        jbSacuvaj.setEnabled(false);
    }

    private static void postaviTreningeUTabelu(JTable jtTreninzi)
    {
        Klijent.getInstance().posaljiObjekat(null, Transfer.VRATI_SVE_TRENINGE);
        LinkedList<Trening> listaTreninga = (LinkedList<Trening>) Klijent.getInstance().primiObjekat();
        ModelTabeleTreninzi mtt = new ModelTabeleTreninzi(listaTreninga);
        jtTreninzi.setModel(mtt);
    }

    public static void kreirajTrening(JTextField jtxtSifraTreninga, JTextField jtxtNazivTreninga, JTextField jtxtCena, JTextField jtxtBrojTermina, JTextField jtxtBrojDanaTrajanja, JTextField jtxtVremeMaxDolaska, JTable jtTreninzi)
    {
        try
        {
            Trening t = preuzmiPodatkeSaForme(jtxtSifraTreninga, jtxtNazivTreninga, jtxtCena, jtxtBrojTermina, jtxtBrojDanaTrajanja, jtxtVremeMaxDolaska);

            Klijent.getInstance().posaljiObjekat(t, Transfer.KREIRAJ_TRENING);
            Klijent.getInstance().primiObjekat();
            signal = Klijent.getInstance().getSignal(); // 9011, 9012
            postaviTreningeUTabelu(jtTreninzi);
            ocistiFormu(jtxtSifraTreninga, jtxtNazivTreninga, jtxtCena, jtxtBrojTermina, jtxtBrojDanaTrajanja, jtxtVremeMaxDolaska);
        }
        catch (NumberFormatException e)
        {
            signal = 90111;
        }
        
        proveriGreske(signal);
    }

    public static void vratiSelektovaniTrening(JTable jtTreninzi, JTextField jtxtSifraTreninga, JTextField jtxtNazivTreninga, JTextField jtxtCena, JTextField jtxtBrojTermina, JTextField jtxtBroJDanaTrajanja, JTextField jtxtVremeMaxDolaska, JButton jbSacuvaj, JButton jbObrisi, JButton jbKreiraj)
    {
        Trening t = new Trening();
        String sifraTreninga = (String) jtTreninzi.getValueAt(jtTreninzi.getSelectedRow(), 0);
        t.setSifraTreninga(sifraTreninga);

        Klijent.getInstance().posaljiObjekat(t, Transfer.VRATI_TRENING);
        t = (Trening) Klijent.getInstance().primiObjekat();

        jtxtSifraTreninga.setText(t.getSifraTreninga());
        jtxtNazivTreninga.setText(t.getNazivTreninga());
        jtxtCena.setText(String.valueOf(t.getCena()));
        jtxtBrojTermina.setText(String.valueOf(t.getBrojTermina()));
        jtxtBroJDanaTrajanja.setText(String.valueOf(t.getBrojDanaTrajanja()));
        jtxtVremeMaxDolaska.setText(String.valueOf(t.getVremeMaxDolaska()));
        jtxtSifraTreninga.setEnabled(false);
        jbObrisi.setEnabled(true);
        jbSacuvaj.setEnabled(true);
        jbKreiraj.setEnabled(false);
    }

    public static void sacuvajTrening(JTextField jtxtSifraTreninga, JTextField jtxtNazivTreninga, JTextField jtxtCena, JTextField jtxtBrojTermina, JTextField jtxtBroJDanaTrajanja, JTextField jtxtVremeMaxDolaska, JTable jtTreninzi, JButton jbKreiraj, JButton jbSacuvaj, JButton jbObrisi)
    {
        try
        {
            Trening t = preuzmiPodatkeSaForme(jtxtSifraTreninga, jtxtNazivTreninga, jtxtCena, jtxtBrojTermina, jtxtBroJDanaTrajanja, jtxtVremeMaxDolaska);
            Klijent.getInstance().posaljiObjekat(t, Transfer.SACUVAJ_TRENING);
            Klijent.getInstance().primiObjekat();
            signal = Klijent.getInstance().getSignal(); // 9013, 9014
            postaviTreningeUTabelu(jtTreninzi);
            ocistiFormu(jtxtSifraTreninga, jtxtNazivTreninga, jtxtCena, jtxtBrojTermina, jtxtBroJDanaTrajanja, jtxtVremeMaxDolaska);
            jbKreiraj.setEnabled(true);
            jbSacuvaj.setEnabled(false);
            jbObrisi.setEnabled(false);
        }
        catch (NumberFormatException e)
        {
            signal = 90111;
        }

        proveriGreske(signal);
    }

    public static void obrisiTrening(JTextField jtxtSifraTreninga, JTextField jtxtNazivTreninga, JTextField jtxtCena, JTextField jtxtBrojTermina, JTextField jtxtBrojDanaTrajanja, JTextField jtxtVremeMaxDolaska, JTable jtTreninzi, JButton jbKreiraj, JButton jbSacuvaj, JButton jbObrisi)
    {
        try
        {
            Trening t = preuzmiPodatkeSaForme(jtxtSifraTreninga, jtxtNazivTreninga, jtxtCena, jtxtBrojTermina, jtxtBrojDanaTrajanja, jtxtVremeMaxDolaska);
            Klijent.getInstance().posaljiObjekat(t, Transfer.OBRISI_TRENING);

            Klijent.getInstance().primiObjekat();
            signal = Klijent.getInstance().getSignal();
            postaviTreningeUTabelu(jtTreninzi);
            ocistiFormu(jtxtSifraTreninga, jtxtNazivTreninga, jtxtCena, jtxtBrojTermina, jtxtBrojDanaTrajanja, jtxtVremeMaxDolaska);
            jbKreiraj.setEnabled(true);
            jbSacuvaj.setEnabled(false);
            jbObrisi.setEnabled(false);
        }
        catch(NumberFormatException e)
        {
            signal = 90111;
        }
        proveriGreske(signal);
    }

    private static Trening preuzmiPodatkeSaForme(JTextField jtxtSifraTreninga, JTextField jtxtNazivTreninga, JTextField jtxtCena, JTextField jtxtBrojTermina, JTextField jtxtBrojDanaTrajanja, JTextField jtxtVremeMaxDolaska) throws NumberFormatException
    {
        Trening t;
        String sifraTreninga =  jtxtSifraTreninga.getText().trim();
        String nazivTreninga = jtxtNazivTreninga.getText().trim();
        double cena = Double.parseDouble(jtxtCena.getText().trim());
        int brojTermina = Integer.parseInt(jtxtBrojTermina.getText().trim());
        int brojDanaTrajanja = Integer.parseInt(jtxtBrojDanaTrajanja.getText().trim());
        int vremeMaxDolaska = Integer.parseInt(jtxtVremeMaxDolaska.getText().trim());

        t = new Trening(sifraTreninga, nazivTreninga, cena, brojTermina, brojDanaTrajanja, vremeMaxDolaska);
        return t;
    }

    private static void ocistiFormu(JTextField jtxtSifraTreninga, JTextField jtxtNazivTreninga, JTextField jtxtCena, JTextField jtxtBrojTermina, JTextField jtxtBroJDanaTrajanja, JTextField jtxtVremeMaxDolaska)
    {
        jtxtSifraTreninga.setEnabled(true);
        jtxtSifraTreninga.setText("");
        jtxtNazivTreninga.setText("");
        jtxtCena.setText("");
        jtxtBrojTermina.setText("");
        jtxtBroJDanaTrajanja.setText("");
        jtxtVremeMaxDolaska.setText("");
    }

    private static void proveriGreske(int signal)
    {
        switch (signal)
        {
            case 9011:
                prikaziPoruku(signal, "Novi Trening uspesno kreiran!", "Obavestenje", JOptionPane.INFORMATION_MESSAGE);
                break;
            case 90111:
                prikaziPoruku(signal, "Neispravan format unosenja podataka!\nZa numericke vrednosti je potrebno unostiti iskljucivo brojeve!", "Greska u unosu brojnih vrednosti", JOptionPane.ERROR_MESSAGE);
                break;
            case 9012:
                prikaziPoruku(signal, "Novi Trening nije mogao biti uspesno kreiran! Verovatno vec postoji trening sa istom sifrom u bazi!", "Serverska greska", JOptionPane.ERROR_MESSAGE);
                break;
            case 9013:
                prikaziPoruku(signal, "Promene podataka o Treningu uspesno sacuvane u bazi!", "Obavestenje", JOptionPane.INFORMATION_MESSAGE);
                break;
            case 9014:
                prikaziPoruku(signal, "Promene podataka nisu mogle biti uspesno sacuvane!", "Serverska greska", JOptionPane.ERROR_MESSAGE);
                break;
            case 9015:
                prikaziPoruku(signal, "Trening uspesno obrisan u bazi!", "Obavestenje", JOptionPane.INFORMATION_MESSAGE);
                break;
            case 9016:
                prikaziPoruku(signal, "Trening nije uspesno obrisan u bazi!", "Serverska greska", JOptionPane.ERROR_MESSAGE);
                break;
        }
    }

    private static void prikaziPoruku(int signal, String poruka, String naslovPoruke, int vrstaPoruke)
    {
        JOptionPane.showMessageDialog(null, "Signal:" + signal + "\n" + poruka, naslovPoruke, vrstaPoruke);
    }
}
